﻿// --- 文件名: PropertyNameVisibilityConverter.cs ---
using System;
using System.Collections.ObjectModel; // 需要 ObservableCollection
using System.Globalization;
using System.Linq; // 需要 Linq (Contains)
using System.Windows; // 需要 Visibility
using System.Windows.Data; // 需要 IValueConverter

namespace RevitProject.SpaceManager.Converters // 请确认命名空间是否正确
{
    /// <summary>
    /// 值转换器，用于根据属性名是否存在于可见属性集合中来控制控件的可见性。
    /// </summary>
    public class PropertyNameVisibilityConverter : IValueConverter
    {
        /// <summary>
        /// 将可见属性名集合转换为 Visibility 枚举值。
        /// </summary>
        /// <param name="value">绑定的值，期望是 ObservableCollection<string> 类型的可见属性名列表。</param>
        /// <param name="targetType">目标类型，期望是 Visibility。</param>
        /// <param name="parameter">转换器参数，期望是要检查的列的属性名 (string)。</param>
        /// <param name="culture">区域性信息。</param>
        /// <returns>如果属性名在集合中，返回 Visibility.Visible；否则返回 Visibility.Collapsed。</returns>
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // 检查输入值是否为可见属性列表，并且转换器参数是否为字符串
            if (value is ObservableCollection<string> visibleProperties && parameter is string propertyName)
            {
                // 如果列表包含指定的属性名，则返回可见
                return visibleProperties.Contains(propertyName) ? Visibility.Visible : Visibility.Collapsed;
            }
            // 如果输入无效或类型不匹配，默认返回隐藏
            return Visibility.Collapsed;
        }

        /// <summary>
        /// 将 Visibility 转换回属性名集合（不支持单向转换）。
        /// </summary>
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            // 此转换器仅用于单向绑定（ViewModel -> View），因此不支持反向转换
            throw new NotImplementedException("PropertyNameVisibilityConverter 不支持 ConvertBack。");
        }
    }
}
// --- 文件结束: PropertyNameVisibilityConverter.cs ---